/**
 * axios配置
 */
import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
import store from '@/store'
import router from '@/router'
import setting from './setting'
import {MessageBox} from 'element-ui'

Vue.use(VueAxios, axios);

axios.defaults.baseURL = setting.baseURL;
axios.defaults.headers.common[setting.tokenHeaderName] = store.state.user.token;

/* 响应拦截器 */
axios.interceptors.response.use((res) => {

    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
    // 否则的话抛出错误
    if (res.status === 200 || res.status === 201 || res.status === 202 || res.status === 204) {
        return Promise.resolve(res.data);
    } else {
        return Promise.reject(res.data);
    }

}, (error) => { // https://juejin.cn/post/6844903652881072141
    if (error.response.status) {
        switch (error.response.status) {
            // 401: 未登录
            // 未登录则跳转登录页面，并携带当前页面的路径
            // 在登录成功后返回当前页面，这一步需要在登录页操作。
            case 401:
                if (error.response.config.url === setting.menuUrl) {
                    store.dispatch('user/setToken').then(() => {
                        location.replace('/');
                    });
                    return;
                }
                MessageBox.alert('登录状态已过期，请退出重新登录！', '系统提示', {
                    confirmButtonText: '重新登录',
                    callback: action => {
                        if (action === 'confirm') {
                            store.dispatch('user/setToken').then(() => {
                                router.push({path: '/login'});
                            });
                        }
                    },
                    beforeClose: () => {
                        MessageBox.close();
                    }
                });
                break;
            // 403 用户没有权限
            case 403:

                break;
            // 404请求不存在
            case 404:

                break;
        }
        return Promise.reject(new Error(error.response.data.msg));
    }
    return Promise.reject(error.response);
});
